package com.promise.jokerdream.task.base

/**
 * 任务接口
 */
interface ITask {
    /**
     * 任务ID
     */
    val id: String
    
    /**
     * 任务名称
     */
    val name: String
    
    /**
     * 任务类型
     */
    val taskType: TaskType
    
    /**
     * 重复次数
     */
    val totalRepeatCount: Int
    
    /**
     * 当前已执行次数
     */
    val currentExecutionCount: Int
    
    /**
     * 任务是否已完成（所有重复次数都执行完毕）
     */
    val isCompleted: Boolean
    
    /**
     * 执行任务
     */
    suspend fun execute(): TaskResult
    
    /**
     * 取消任务
     */
    fun cancel()
    
    /**
     * 获取任务状态
     */
    fun getStatus(): TaskStatus
    
    /**
     * 重置任务（重新开始执行）
     */
    fun reset()
}

/**
 * 任务执行结果
 */
sealed class TaskResult {
    object Success : TaskResult()
    data class Failure(val error: Throwable) : TaskResult()
    object Cancelled : TaskResult()
}

/**
 * 任务类型枚举
 */
enum class TaskType {
    /**
     * 立即执行的任务
     */
    IMMEDIATE,

    /**
     * 定时执行的任务
     */
    SCHEDULED
}

/**
 * 任务状态
 */
enum class TaskStatus {
    /**
     * 等待执行
     */
    PENDING,
    
    /**
     * 正在执行
     */
    RUNNING,
    
    /**
     * 已完成
     */
    COMPLETED,
    
    /**
     * 已取消
     */
    CANCELLED,
    
    /**
     * 执行失败
     */
    FAILED
}